package com.cgq.base.dao.impl;

import java.io.Serializable;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

import com.cgq.base.dao.BaseDao;
import com.cgq.utils.ReflectUtil;

@SuppressWarnings("unchecked")
@Component
public class BaseDaoImpl<T> 
			extends HibernateDaoSupport implements BaseDao<T> {

	/** Hibernate 操作模板基类*/
	protected HibernateTemplate hibernateTemplate=null;
	
	/** 利用反射获取对象的类型*/
	private Class<T> entityClass=ReflectUtil.getEntity(this.getClass());

	/**
	 * 注入sessionFactory
	 * @param sessionFactory
	 */
	@Autowired
	public void setSessionFactoryUtil(SessionFactory sessionFactory){
		this.setSessionFactory(sessionFactory);
		hibernateTemplate=this.getHibernateTemplate();
	}
	
	/**保存数据*/
	public T save(T entity) {
		return (T) hibernateTemplate.save(entity);
	}

	/**修改数据  */
	public void update(T entity) {
		hibernateTemplate.update(entity);
	}

	/**删除数据*/
	public void delete(Serializable... ids) {
		for (Serializable id : ids) {
			hibernateTemplate.delete(find(id));
		}
	}

	/**查找数据 */
	public T find(Serializable id) {
		return hibernateTemplate.get(entityClass, id);
	}

}
